package com.idanchuang.component.logback.util;

import com.idanchuang.component.core.helper.EnvContext;
import com.zoi7.component.core.base.BaseClass;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;

/**
 * @author yjy
 * Created at 2021/7/13 10:00 上午
 */
public class TraceIdUtil extends BaseClass {

    /**
     * 将所有traceId整合
     * @return 一个整体的traceId信息
     */
    public static String getId() {
        StringBuilder finalTid = new StringBuilder();
        String dcId = getDcId();
        if (notBlank(dcId)) {
            finalTid.append("dc:").append(dcId).append(";");
        }
        String apm2Id = getApm2Id();
        if (notBlank(apm2Id)) {
            finalTid.append("apm:").append(apm2Id).append(";");
        }
        String skyId = getSkyId();
        if (notBlank(skyId) && !"TID: N/A".equalsIgnoreCase(skyId)) {
            finalTid.append("sky:").append(skyId).append(";");
        }
        return finalTid.toString();
    }

    /**
     * @return 当前skywalking的traceId
     */
    public static String getSkyId() {
        return TraceContext.traceId();
    }

    /**
     * @return 当前Apm2.0的traceId
     */
    public static String getApm2Id() {
        return org.slf4j.MDC.get("apm-traceid");
    }

    /**
     * @return 当前组件内部的traceId
     */
    public static String getDcId() {
        return EnvContext.getDcTraceId();
    }

}
